package tag

import (
	"context"
)

// ListParams 标签列表查询参数
type ListParams struct {
	Type *int
	Page int
	Size int
}

// Repository 标签仓储接口
type Repository interface {
	// Create 创建标签
	Create(ctx context.Context, tag *Tag) error

	// Update 更新标签
	Update(ctx context.Context, tag *Tag) error

	// Delete 删除标签
	Delete(ctx context.Context, id uint) error

	// BatchDelete 批量删除标签
	BatchDelete(ctx context.Context, ids []uint) error

	// GetByID 根据ID获取标签
	GetByID(ctx context.Context, id uint) (*Tag, error)

	// GetBySlug 根据Slug获取标签
	GetBySlug(ctx context.Context, slug string) (*Tag, error)

	// GetByName 根据Name获取标签
	GetByName(ctx context.Context, name string) (*Tag, error)

	// ExistsByName 检查名称是否存在
	ExistsByName(ctx context.Context, name string, tagType int, excludeID uint) (bool, error)

	// ExistsBySlug 检查Slug是否存在
	ExistsBySlug(ctx context.Context, slug string, tagType int, excludeID uint) (bool, error)

	// List 获取标签列表
	List(ctx context.Context, params *ListParams) ([]*Tag, int64, error)

	// GetHotTags 获取热门标签
	GetHotTags(ctx context.Context, tagType *int, limit int) ([]*Tag, error)

	// GetTagStat 获取标签使用统计
	GetTagStat(ctx context.Context, id uint) (articleCount int64, bookCount int64, err error)

	// UpdateUsageCount 更新标签使用计数
	UpdateUsageCount(ctx context.Context, id uint, count int64) error
}
